package ar.frba.utn.diseñosistemas.TP2;

import java.util.ArrayList;

public class Buscador implements IBuscador 
{
	private ArrayList<Aerolinea> Aerolineas;
	
	public Buscador(ArrayList<Aerolinea> aerolineas)
	{
		this.Aerolineas = aerolineas;
	}
	
	public ArrayList<Itinerario> Buscar(Busqueda unaBusqueda) {
		
		ArrayList<Itinerario> itinerarios = new ArrayList<Itinerario>();
		ArrayList<Asiento> asientos = new ArrayList<Asiento>();
		if (unaBusqueda.getEscalas() == 0){
			for (Aerolinea aerolinea : Aerolineas) {
				asientos.addAll(aerolinea.buscar(unaBusqueda));
			}
			for (Asiento asiento : asientos){
				Itinerario itinerario = new Itinerario();
				itinerario.addAsiento(asiento);
				itinerarios.add(itinerario);
			}
		}
		else{
			Itinerario itinerarioAux = new Itinerario();
			int i = 0;
			for (Aerolinea aerolinea : Aerolineas) {
				this.buscarConEscalas(i, unaBusqueda, aerolinea, itinerarios, itinerarioAux);
			}
		}
		
		return itinerarios;
	}
	
	public void buscarConEscalas(int i, Busqueda unaBusqueda, Aerolinea aerolinea, 
			ArrayList<Itinerario> itinerarios, Itinerario itinerarioAux) {
		if (i>unaBusqueda.getEscalas() || i>2){
			i--;
			return;
		}
		
		ArrayList<Asiento> asientos = aerolinea.buscarSinDestino(unaBusqueda);
		for (Asiento asiento : asientos) {
			itinerarioAux.addAsiento(asiento);
			
			if (asiento.getDestino().equals(unaBusqueda.getDestino())){
				itinerarios.add(itinerarioAux);
				itinerarioAux.getAsientos().remove(i);
				return;
			}else{
				i++;
				unaBusqueda.setOrigen(asiento.getDestino());
				this.buscarConEscalas(i, unaBusqueda, aerolinea, itinerarios, itinerarioAux);
				i--;
			}
			
		}
		
	}

}
